import logging
from logging.handlers import RotatingFileHandler

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.wtf import CSRFProtect
from flask_session import Session

from config import config_level

def set_log(level):
    # 设置日志等级
    logging.basicConfig(level=level)
    # 创建日志记录器, 文件的路径,文件的大小,文件的个数
    file_log_handle = RotatingFileHandler("logs/log", maxBytes=1024*1024*100, backupCount=10)
    # 创建日志的记录格式
    format = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
    # 为日志记录器设置日志记录格式
    file_log_handle.setFormatter(format)
    # 为全局日志对象添加日志记录器
    logging.getLogger().addHandler(file_log_handle)



db = SQLAlchemy()
redis_store = config_level["pro"].SESSION_REDIS

def create_app(key):
    # 调用日志开启函数
    set_log(config_level[key].LEVEL_LOG)

    # 创建Flask实例对象
    app = Flask(__name__)

    app.config.from_object(config_level[key])

    # 配置数据库, 查看SQLAlchemy()内部函数得知db实际失调用了init_app(app)函数
    db.init_app(app)

    # 开启验证,只管验证,SECRET_KEY
    CSRFProtect(app)

    # 利用 flask-session扩展，将 session 数据保存到 Redis 中,
    Session(app)

    # 注册蓝图
    from info.modules.index import index_blue
    app.register_blueprint(index_blue)

    return app